package com.company.design.create.builder;

/**
 * @author yingfing
 * @create 2020--09--26 10:31
 * @describe 建造者模式
 */
public class Test {
    /**
     * 1. 主要作用 : 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象
     * 2. 结局的问题 :
     * 方便用户创建复杂的对象 (不需要知道实现过程)
     * 代码复用性 & 封装性 (将对象构建过程和细节进行封装 & 复用)
     * 3. 模式讲解
     * 指挥者和客户进行互动,沟通需求
     * 沟通后,指挥者将客户创建产品的需要划分为各个部件的建造请求
     * 将各个部门的建造请求委派到具体的建造者
     * 各个具体的建造者负责进行产品部件的构建
     * 最终构建成具体产品
     */
    public static void main(String[] args) {
        /**
         * 以 builder 模式创建共享单车为例
         */
        showBike(new MobikeBuilder());
        showBike(new OfoBuilder());
    }

    private static void showBike(Builder builder) {
        Director director = new Director(builder);
        Bike bike = director.buildBike();
        bike.getFrame().frame();
        bike.getSeat().seat();
        bike.getTrie().trie();
    }
}
